package com.lvmama.service.rhino.flow;

import com.github.pagehelper.PageInfo;
import com.lvmama.common.result.Result;
import com.lvmama.pojo.dto.rhino.flow.FlowConversionDTO;
import com.lvmama.pojo.dto.rhino.flow.FlowStatisticsFunnel;
import com.lvmama.pojo.dto.rhino.page.FlowStatisticsVo;
import com.lvmama.pojo.entity.rhino.page.FlowData;

import java.util.List;

public interface FlowConversionService {
    /**
     *
     * @Title: queryFlowbyChannel
     * @Description: 查询app直接访问流量情况
     * @param @param flowConversionDTO
     * @param @return    设定文件
     * @return Result<List<FlowStatisticsVo>>    返回类型
     * @throws
     */
     Result<List<FlowStatisticsVo>> queryFlowbyApp(FlowConversionDTO flowConversionDTO);

    /**
     *
     * @Title: queryFlowbyChannelWap
     * @Description: 查询PC/M站直接访问的流量情况
     * @param @param flowConversionDTO
     * @param @return    设定文件
     * @return Result<List<FlowStatisticsVo>>    返回类型
     * @throws
     */
     Result<List<FlowStatisticsVo>> queryFlowbyChannelWap(FlowConversionDTO flowConversionDTO);

    /**
     *
     * @Title: queryFlowbyChannel
     * @Description: 流量渠道来源分组查询，用于页面漏斗展示
     * @param @param flowConversionDTO
     * @param @return    设定文件
     * @return Result<List<FlowStatisticsVo>>    返回类型
     */
     Result<List<FlowStatisticsVo>> queryFlowbyChannel(FlowConversionDTO flowConversionDTO);

    /**
     * 查询漏斗
     * @param flowStatisticsFunnel
     * @return
     */
    Result<PageInfo<FlowStatisticsFunnel>> queryAllFunnel(FlowStatisticsFunnel flowStatisticsFunnel);

    /**
     * 查询漏斗详情
     * @param funnel
     * @return
     */
    Result<List<FlowStatisticsFunnel>> queryFunnelDetail(FlowStatisticsFunnel funnel);

    /**
     * 流量转化统计
     * @param flowConversionDTO
     * @return
     */
    Result<FlowData> queryFlowStatisticsData(FlowConversionDTO flowConversionDTO);

    /**
     * 编辑漏斗
     * @param funnel
     */
    void updateFunnel(FlowStatisticsFunnel funnel);

    Result<FlowStatisticsFunnel> selectFunnel(FlowStatisticsFunnel funnel);

    void deleteFunnelDetail(FlowStatisticsFunnel funnel);
    void insertFunnel(FlowStatisticsFunnel funnel);
    void insertFunnelDetail(FlowStatisticsFunnel funnel);
    void deleteFunnel(FlowStatisticsFunnel funnel);

}
